package com.algo.tools.dataset_generator;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

/**
* This class is for generating sequence databases
* 
* Copyright (c) 2008-2012 Philippe Fournier-Viger
* 
* This file is part of the SPMF DATA MINING SOFTWARE
* (http://www.philippe-fournier-viger.com/spmf).
*
* SPMF is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SPMF is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SPMF.  If not, see <http://www.gnu.org/licenses/>.
*/
public class SequenceDatabaseGenerator {

	private static Random random = new Random(System.currentTimeMillis());

	/**
	 * @param sequenceCount sequence count
	 * @param maxDistinctItems maximum number of distint items
	 * @param itemCountByItemset number of items by itemset
	 * @param itemsetCountBySequence number of itemsets by sequences
	 * @throws IOException 
	 */
	public  void generateDatabase(int sequenceCount, int maxDistinctItems, int itemCountByItemset,
			int itemsetCountBySequence, String output, boolean withTimestamps) throws IOException {
		
		BufferedWriter writer = new BufferedWriter(new FileWriter(output)); 
		
		// Generate some random sequences
		for (int i = 0; i < sequenceCount; i++) {
			if(i != 0){
				writer.newLine();
			}
			for (int j = 0; j < itemsetCountBySequence; j++) {
				if(withTimestamps){
					writer.write("<" + j + "> ");
				}
				for (int k = 0; k < itemCountByItemset; k++) {
					int item = random.nextInt(maxDistinctItems) + 1;
					writer.write(item + " ");
				}
				writer.write("-1 ");
			}
			writer.write("-2 ");
		}
		writer.close();
	}
}